package cn.com.surker.material.service;

import cn.com.surker.dto.main.MainMaterialBillAddDTO;
import cn.com.surker.dto.main.MainMaterialBillAuditDTO;
import cn.com.surker.dto.main.MainMaterialBillDTO;
import cn.com.surker.material.entity.MainMaterialBill;
import cn.com.surker.material.vo.MainMaterialBillVo;
import cn.com.surker.spring.RestResultDto;
import cn.com.surker.system.model.CacheUser;
import cn.com.surker.vo.main.MainMaterialBillVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* <p>
    * 主材材料结算信息表 服务类
    * </p>
*
* @author admin
* @since 2024-12-03
*/
public interface MaterialBillBaseService extends IService<MainMaterialBill> {


    /**
     * 分页方法
     * @param dto
     * @return
     */
    IPage<MainMaterialBillVO> page(MainMaterialBillDTO dto);


    /**
     * 新增方法
     * @param dto
     * @return
     */
    RestResultDto saveBill(MainMaterialBillAddDTO dto, CacheUser user);


    /**
     * 修改方法
     * @param dto
     * @return
     */
    RestResultDto updateBill(MainMaterialBillAddDTO dto,CacheUser user);


    /**
     * 状态更新
     * @param dto
     * @return
     */
    RestResultDto updateStatus(MainMaterialBillAddDTO dto,CacheUser user);

    /**
     * 查询购进合计
     * @param searchVal
     * @param today
     * @param startTime
     * @param type 0材料 1运输
     * @param status
     * @param supplierId
     * @param materialId
     * @param materialType 材料大类名称 SysMaterialTypeEnum
     * @return
     */
    MainMaterialBill findBuySum(Long orgId,String searchVal, String today, String startTime, String endTime, Integer type,
                                  Integer status, Long supplierId, Long materialId,Integer materialType, Integer isBill);

    /**
     * 查询购进报表明细
     * @param searchVal
     * @param today
     * @param startTime
     * @param endTime
     * @param type 0材料 1运输
     * @param status
     * @param supplierId
     * @param materialId
     * @param materialType 材料大类名称 SysMaterialTypeEnum
     * @param offset
     * @param limit
     * @return
     */
    IPage findBuyPage(Long orgId,String searchVal, String today, String startTime, String endTime, Integer type, Integer status,
                      Long supplierId, Long materialId,Integer materialType, Integer isBill, Integer offset, Integer limit);

    /**
     * 审核购进明细报表
     * @param orgId
     * @param today 时间点
     * @param creator
     * @param type 0 材料统计 1 财务
     * @return
     */
    RestResultDto examineBuy(Long orgId, String today, String creator, Integer type);

    /**
     * 查询购进报表汇总
     * @param orgId
     * @param searchVal
     * @param today
     * @param startTime
     * @param endTime
     * @param type 0材料 1运输
     * @param status
     * @param supplierId
     * @param materialId
     * @param materialType 材料大类名称 SysMaterialTypeEnum
     * @return
     */
    List<MainMaterialBillVo> findBuyData(Long orgId,String searchVal, String today, String startTime, String endTime,
                  Integer type, Integer status, Long supplierId, Long materialId,Integer materialType, Integer isBill);

    /**
     * 计算供应商购进报表信息
     * @param today 结算月份
     * @param type 类型(0：主材，1：运输)
     * @param supplierId 供应商ID
     * @param materialId 材料ID
     * @param creator
     * @return
     */
    RestResultDto calcMaterialDetail(String today, Long orgId, Integer type, Long supplierId,
                                     Long materialId, String creator, Integer isCloud);

//    /**
//     * 运输购进数据
//     * @param today
//     * @param orgId
//     * @param type
//     * @param supplierId
//     * @param materialId
//     * @param creator
//     * @param isCloud
//     * @return
//     */
//    RestResultDto calcTransportMaterialDetail(String today, Long orgId, Integer type, Long supplierId,
//                                     Long materialId, String creator, Integer isCloud);

    /**
     * 获取供应商数据
     * @param orgId
     * @return
     */
    List<Map<String,Object>> getSupplierList(Long orgId);

    /**
     * 获取材料数据
     * @param orgId
     * @return
     */
    List<Map<String,Object>> getMaterialList(Long orgId);

    /**
     * 获取报表开始时间
     * @param
     * @return
     */
    List<Map<String,Object>> getToDayList();

    /**
     * 审核方法
     * @param dto
     * @return
     */
    RestResultDto auditdata(MainMaterialBillAuditDTO dto,CacheUser user);

    /**
     * 查询是否已审核
     * @param orgId
     * @param today
     * @return
     */
    Integer findCheck(String dbCode, Long orgId, String today);

}
